package vip.george.p0283;

import java.util.Arrays;

public class P283 {
    // 0 1 0 3 12
    // 1 0 0 3 12
    // 1 3 0 0 12
    // 1 3 12 0 0

    public void moveZeroes(int[] nums) {
        int len = nums.length;
        if (len < 2) {
            return;
        }
        //使用快慢指针，慢指针寻找零元素，快指针寻找非零元素
        int slow = 0;
        int fast = 1;
        while (fast < len) {
            //如果慢指针指向的元素非零，则慢指针继续移动
            if (nums[slow] != 0) {
                slow++;
            }
            // 慢指针指向的元素为零，且快指针指向的元素非零，则交换，并且慢指针继续移动
            if (nums[slow] == 0 && nums[fast] != 0) {
                int temp = nums[slow];
                nums[slow] = nums[fast];
                nums[fast] = temp;
                slow++;
            }
            //无论如何，快指针都要移动（要继续往下找非零元素）
            fast++;
//            System.out.println("当前数组的处理进度：" + Arrays.toString(nums));
        }
    }

    public static void main(String[] args) {
        P283 p = new P283();
//        int[] nums = {0, 1, 0, 3, 8};
//        int[] nums = {0, 1, 0, 3, 7, 0, 0, 0, 1};
        int[] nums = {1, 0, 3};
        System.out.println("原始数组：");
        System.out.println(Arrays.toString(nums));
        System.out.println("------------------");
        p.moveZeroes(nums);
        System.out.println("------------------");
        System.out.println("最终结果：");
        System.out.println(Arrays.toString(nums));
    }
}
